import 'package:flutter/material.dart';

class NotifyData {
  ///更新状态管理
  final String key;

  ///更新内容
  String message;
  var body;
  NotifyData({required this.key, this.message = '', this.body = ''});
}

final GlobalState globalState = GlobalState();

// 定义状态管理类
class GlobalState {
  // 单例模式
  static final GlobalState _instance = GlobalState._internal();

  factory GlobalState() => _instance;

  GlobalState._internal();

  late NotifyData _data;

  // 状态更新方法
  set state(NotifyData newdata) {
    _data = newdata;
    // 通知所有监听者状态已更新
    _notifyListeners();
  }

  // 监听者列表
  final List<void Function(NotifyData)> _listeners = [];

  // 添加监听者
  void addListener(void Function(NotifyData) listener) {
    _listeners.add(listener);
  }

  // 移除监听者
  void removeListener(void Function(NotifyData) listener) {
    _listeners.remove(listener);
  }

  // 通知监听者
  void _notifyListeners() {
    for (var listener in _listeners) {
      listener(_data);
    }
  }
}

// 一个简单的 Widget 监听全局状态变化
class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  @override
  void initState() {
    super.initState();
    GlobalState().addListener(_onStateChange);
  }

  @override
  void dispose() {
    GlobalState().removeListener(_onStateChange);
    super.dispose();
  }

  void _onStateChange(NotifyData newdata) {
    setState(() {
      print(' key = ${newdata.key}  message = ${newdata.message}');
    });
  }

  @override
  Widget build(BuildContext context) {
    return TextButton(
        onPressed: () {
          GlobalState().state = NotifyData(key: '更新key');
        },
        child: Container());
  }
}
